/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package consumo.face.cadastro.tarifa;

import consumo.entity.Azul;
import consumo.entity.BaixaTensao;
import consumo.entity.Convencional;
import consumo.entity.Tarifa;
import consumo.entity.Verde;
import consumo.face.BaseCDIBean;
import consumo.session.TarifaSession;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.inject.Inject;

/**
 *
 * @author Carlos Taschetto
 */

@ManagedBean
@ViewScoped
public class TarifaFace extends BaseCDIBean<Verde> {

    private static final long serialVersionUID = 1L;
    
    @Inject
    private TarifaSession bean;
    private List<Verde> listaVerde;
    private List<Convencional> listaConv;
    private Convencional selectedConv;
    private List<Azul> listaAzul;
    private Azul selectedAzul;
    private List<BaixaTensao> listaBt;
    private BaixaTensao selectedBt;
    private List<Tarifa> listaTarifa;
    private String tarifaNome;
    private boolean isNew;
    
    


    @PostConstruct
    protected void init(){
        atribuiEstadoInicial();
    }

    private void atribuiEstadoInicial(){
        listaVerde = null;
        listaConv = null;
        selectedConv = new Convencional();
        listaAzul = null;
        selectedAzul = new Azul();
        listaBt = null;
        selectedBt = new BaixaTensao();
        listaTarifa = null;
        tarifaNome = "";
        setSelectedBean(new Verde());
    }

    
    /**
     * inicializa uma nova  a ser gravada
     * Tarifa Verde
     */
    public void doCreate(){
        setIsNew(true);
        setSelectedBean(new Verde());
    }
    
    /**
     * inicializa uma nova  a ser gravada
     * Tarifa Azul
     */
    public void doCreateAzul(){
        setIsNew(true);
        setSelectedAzul(new Azul());
    }
    
    /**
     * inicializa uma nova  a ser gravada
     * Tarifa Convencional
     */
    public void doCreateConv(){
        setIsNew(true);
        Convencional aux = new Convencional();
        aux.setKWh(new BigDecimal(0));
        setSelectedConv(aux);
        
    }
    
    /**
     * inicializa uma nova  a ser gravada
     * Tarifa BT
     */
    public void doCreateBt(){
        setIsNew(true);
        setSelectedBt(new BaixaTensao());
    }
    
    /**
     * Salva a tarifa Verde
     */
    private void doFinishCreate(){
        bean.save(Verde.class,getSelectedBean());
        listaVerde = bean.getAllTarifa(Verde.class);
    }
    
    /**
     * Salva a tarifa Azul
     */
    private void doFinishCreateAzul(){
        bean.save(Azul.class,getSelectedAzul());
        listaAzul = bean.getAllTarifa(Azul.class);
    }

    /**
     * Salva a tarifa Convencional
     */
    private void doFinishCreateConv(){
        bean.save(Convencional.class,getSelectedConv());
        listaConv = bean.getAllTarifa(Convencional.class);
    }
    
    /**
     * Salva a tarifa Verde
     */
    private void doFinishCreateBt(){
        bean.save(BaixaTensao.class,getSelectedBt());
        listaBt = bean.getAllTarifa(BaixaTensao.class);
    }
    
    /**
     * Edita uma tarifa Verde
     */
    private void doEdit(){
        bean.set(Verde.class,getSelectedBean());
        listaVerde = bean.getAllTarifa(Verde.class);
    }
    
    /**
     * Edita uma tarifa Verde
     */
    private void doEditAzul(){
        bean.set(Azul.class,getSelectedAzul());
        listaAzul = bean.getAllTarifa(Azul.class);
    }
    
    /**
     * Edita uma tarifa Convencional
     */
    private void doEditConv(){
        bean.set(Convencional.class,getSelectedConv());
        listaConv = bean.getAllTarifa(Convencional.class);
    }
    
    /**
     * Edita uma tarifa Baixa Tensão
     */
    private void doEditBt(){
        bean.set(BaixaTensao.class,getSelectedBt());
        listaBt = bean.getAllTarifa(BaixaTensao.class);
    }
    
    /**
     * Verifica se é uma nova inserção ou uma alteração
     *  Tarifa Verde
     */
    public void doSave(){
        if(isIsNew())
            doFinishCreate();
        else doEdit();
        setIsNew(false);
    }
    
    /**
     * Verifica se é uma nova inserção ou uma alteração
     *  Tarifa Azul
     */
    public void doSaveAzul(){
        if(isIsNew())
            doFinishCreateAzul();
        else doEditAzul();
        setIsNew(false);
    }
    
    /**
     * Verifica se é uma nova inserção ou uma alteração
     *  Tarifa Convencional
     */
    public void doSaveConv(){
        if(isIsNew())
            doFinishCreateConv();
        else doEditConv();
        setIsNew(false);
    }
    
    /**
     * Verifica se é uma nova inserção ou uma alteração
     *  Tarifa Bt
     */
    public void doSaveBt(){
        if(isIsNew())
            doFinishCreateBt();
        else doEditBt();
        setIsNew(false);
    }
 
    public void doRemove(){
        bean.remove(getSelectedBean());
        setListaVerde(bean.getAllTarifa(Verde.class));
    }
    
    public void doRemoveAzul(){
        bean.remove(getSelectedAzul());
        setListaAzul(bean.getAllTarifa(Azul.class));
    }
    
    public void doRemoveConv(){
        bean.remove(getSelectedConv());
        setListaConv(bean.getAllTarifa(Convencional.class));
    }
    
    public void doRemoveBt(){
        bean.remove(getSelectedBt());
        setListaBt(bean.getAllTarifa(BaixaTensao.class));
    }

    public List<Verde> getListaVerde() {
        if(listaVerde==null){
            listaVerde = bean.getAllTarifa(Verde.class);
        }
        return listaVerde;
    }

    public void setListaVerde(List<Verde> listaVerde) {
        this.listaVerde = listaVerde;
    }

    public boolean isIsNew() {
        return isNew;
    }

    public void resetIsNew(){
        this.isNew = false;
    }
    
    public void setIsNew(boolean isNew) {
        this.isNew = isNew;
    }

    public List<Tarifa> getListaTarifa() {
        return listaTarifa;
    }

    public void setListaTarifa(List<Tarifa> listaTarifa) {
        this.listaTarifa = listaTarifa;
    }

    public String getTarifaNome() {
        return tarifaNome;
    }

    public void setTarifaNome(String tarifaNome) {
        System.out.println(tarifaNome);
        if(!(this.tarifaNome.equals(tarifaNome))){
            this.tarifaNome = tarifaNome;
            setListaTarifa(bean.getTipoTarifaByTipo(tarifaNome));
            for(Tarifa val:getListaTarifa()){
                System.out.println(val);
            }
        }
    }

    public List<Convencional> getListaConv() {
        if(listaConv==null){
            listaConv = bean.getAllTarifa(Convencional.class);
        }
        return listaConv;
    }

    public void setListaConv(List<Convencional> listaConv) {
        this.listaConv = listaConv;
    }

    public Convencional getSelectedConv() {
        return selectedConv;
    }

    public void setSelectedConv(Convencional selectedConv) {
        this.selectedConv = selectedConv;
    }

    public List<Azul> getListaAzul() {
        if(listaAzul==null){
            listaAzul = bean.getAllTarifa(Azul.class);
        }
        return listaAzul;
    }

    public void setListaAzul(List<Azul> listaAzul) {
        this.listaAzul = listaAzul;
    }

    public Azul getSelectedAzul() {
        return selectedAzul;
    }

    public void setSelectedAzul(Azul selectedAzul) {
        this.selectedAzul = selectedAzul;
    }

    public List<BaixaTensao> getListaBt() {
        if(listaBt==null){
            listaBt = bean.getAllTarifa(BaixaTensao.class);
        }
        return listaBt;
    }

    public void setListaBt(List<BaixaTensao> listaBt) {
        this.listaBt = listaBt;
    }

    public BaixaTensao getSelectedBt() {
        return selectedBt;
    }

    public void setSelectedBt(BaixaTensao selectedBt) {
        this.selectedBt = selectedBt;
    }
    
}
